package estructuras;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import estructuras.Queue;
import java.util.NoSuchElementException;

/**
 *
 * @author asus
 */
public abstract class AbstractQueue<E> implements Queue<E> {
    
    /**
     * Devuelve la cabeza de la cola, pero no la retira de ésta. 
     * @return primer elemento de la cola
     * @throws NoSuchElementException si la cola está vacía 
     */
    public E element() {
        if (isEmpty()) {
            throw new NoSuchElementException();
        } else {
            return peek();
        }
    }
    
    /**
     * Intenta ingresar el elemento a la cola, y regresa un valor booleano que indica si la operación tuvo éxito
     * @param o elemento a ingresar
     * @return true si la operación fue exitosa, false en el caso contrario
     */
    public abstract boolean offer (E o);
    
    /**
     * Devuelve el primer elemento de la cola, sin retirarlo
     * @return primer elemento de la cola
     */
    public abstract E peek(); 
         
    /**
     * Devuelve el primer elemento de la cola y lo retira de ésta. 
     * @return primer elemento de la cola
     */
    public abstract E poll();
    
    /**
     * Elimina la cabeza de la cola
     * @return elemento eliminado.
     */
    public E remove() {
        if (isEmpty()) throw new NoSuchElementException();
        else {
            return poll();
        }
    }
    
    /**
     * Indica si la cola está vacía.
     * @return true si la cola está vacía, false en caso contrario. 
     */
    public abstract boolean isEmpty();
}
